import lejos.nxt.Button;
import lejos.nxt.LCD;
import lejos.robotics.subsumption.Behavior;

/**
 *
 * @author Nicolas
 */
public class ChangerDeDirection implements Behavior {

    /**
     *  Prend le contrôle
     * @return true quand le robot est sur une case blanche 
     */
    public boolean takeControl() {
        try {
            return Robot.BLANC.contient(Robot.readLightValue());
        } catch (Exception ex) {
            Robot.justSay("Erreur takeControl ChangerDeDirection");
            return false;
        }
    }

    public void suppress() {
        try {
        } catch (Exception ex) {
            Robot.justSay("Erreur suppress ChangerDeDirection");
        }
    }

    /**
     * le robot tourne vers la droite
     */
    public void action() {

        try {
 
			//On fait marche arrière jusqu'à la ligne noire
            Robot.reculerJusquaBordCase();
            
            Robot.Pilot.travel(4f+1f);
            //Arc en avant vers la droite (roue droite bloquée)
            Robot.Pilot.reset();
            Robot.MoteurGauche.forward();
            boolean case_suivante=true;

            while(!((Robot.estSurLaLigne()||Robot.estSurDuBlanc())&&case_suivante)){
                if(Robot.estSurDuNoir()){
                    while(Robot.estSurDuNoir()){}
                    LCD.drawString("Bord"+Robot.MoteurGauche.getTachoCount(), 0, 4);
                    case_suivante=true;                    
                    LCD.refresh();
                }
				
                /* Version 3 nuances de gris*/
                On met à jour le sens de navigation pendant la rotation
                if(case_suivante&&Robot.GRIS_CLAIR.contient(Robot.readLightValue())){
                    Robot.estEnSensNormal(false);
                }
				
            }

            LCD.refresh();
            Robot.MoteurGauche.stop();
            Button.ENTER.waitForPressAndRelease();
            //Si on a aterri sur du gris : on màj la direction et la position
            if(Robot.readLightValue()<Robot.BLANC.getBorneInferieur()){
                Robot.mettreAjourDirection(-1);
                Robot.mettreAJourPosition();
                Labyrinthe.setTypeCase(Robot.POSITION,TypeCase.MUR);
            }
            //Sinon on fait le chemin inverse
            else {
                Robot.Pilot.steer(-100, -110);    
            }
            
        } catch (Exception ex) {
            Robot.justSay(ex.getMessage());
        }

    }
}
